package cn.org.rookie.jeesdp.core;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
 * 业务异常类，用于处理业务逻辑中的异常情况
 * 继承自RuntimeException，提供错误码、错误信息、附加数据和原始异常信息
 */
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class BusinessException extends RuntimeException {

    /**
     * 错误码
     */
    private final int code;

    /**
     * 附加数据
     */
    private Object data;

    /**
     * 原始异常
     */
    private Throwable exception;

    /**
     * 构造一个包含错误码和错误信息的业务异常
     *
     * @param code    错误码
     * @param message 错误信息
     */
    public BusinessException(int code, String message) {
        super(message);
        this.code = code;
    }

    /**
     * 构造一个包含错误码和原始异常的业务异常
     *
     * @param code      错误码
     * @param exception 原始异常
     */
    public BusinessException(int code, Throwable exception) {
        super(exception.getMessage());
        this.code = code;
        this.exception = exception;
    }

    /**
     * 构造一个包含错误码、错误信息和原始异常的业务异常
     *
     * @param code      错误码
     * @param message   错误信息
     * @param exception 原始异常
     */
    public BusinessException(int code, String message, Throwable exception) {
        super(message);
        this.code = code;
        this.exception = exception;
    }

    /**
     * 构造一个包含错误码、错误信息、附加数据和原始异常的业务异常
     *
     * @param code      错误码
     * @param message   错误信息
     * @param data      附加数据
     * @param exception 原始异常
     */
    public BusinessException(int code, String message, Object data, Throwable exception) {
        super(message);
        this.code = code;
        this.data = data;
        this.exception = exception;
    }

}
